package br.org.bertol.mestrado.engine.optimisation.pso;

/**
 * Encapsula uma objeto que implementa o fator de redu��o linear da in�rcia.
 * @author contaqualquer
 */
public final class LinearInertiaReduction {

    /***/
    private final transient float maxInercia;

    /***/
    private final transient float minInercia;

    /***/
    private final transient long  maxIteracoes;

    /**
     * Cria um novo redutor linera de in�rcia.
     * @param maximInercia
     *            Inércia inical
     * @param minimInercia
     *            Inércia final
     * @param maximIteracoes
     *            Númáximo de iterações
     */
    public LinearInertiaReduction(final float maximInercia,
        final float minimInercia, final long maximIteracoes) {
        this.maxInercia = maximInercia;
        this.minInercia = minimInercia;
        this.maxIteracoes = maximIteracoes;
    }

    /**
     * Retorna a nova in�rcia com o valor reduzido linerarmente.
     * @param kIteration
     *            Itera��o atual
     * @return Nova in�rcia
     */
    public float get(final int kIteration) {
        return maxInercia
                - (kIteration * ((maxInercia - minInercia) / maxIteracoes));
    }
}
